﻿package tools;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5 {

	public static void main(String[] args) {
		try {
			MessageDigest code = MessageDigest.getInstance("MD5");
			String str = "miwen";
			code.update(str.getBytes());
			byte[] bs = code.digest();
			StringBuffer sb=new StringBuffer("");
//			将加密后的字节数组转换成十六进制的字符串，最终形成密文
			for(int i=0;i<bs.length;i++){
//				byte只有八位,只能表示-128到127,1bit就是1位二进制数,1Byte=8bit
//				因为byte的取值范围是 -128～127，而Char是0～65535
//				所以需要& 0xFF 使得byte原来的负值变成正的
//				与 0xff 做 & 运算会将 byte 值变成 int 类型的值，也将 -128～0 间的负值都转成正值了。
				int v = bs[i]&0xFF;
//				System.out.print("bs"+i+"="+bs[i]);
//				System.out.print(" v="+v);
				if(v<16){
					sb.append("0");
				}
				sb.append(Integer.toHexString(v));
//				System.out.println(" sb="+sb);
			}
//			System.out.println("code:"+str);
//			System.out.print("MD5="+sb);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
	}
}
